<?php

class UsuariosController extends GxController {

    public function actionView($id) {
        $this->render('view', array(
            'model' => $this->loadModel($id, 'Usuarios'),
        ));
    }

    public function actionCreate() {
        Controller::registrar_scrips();
        $model = new Usuarios;


        if (isset($_POST['Usuarios'])) {
            $model->setAttributes($_POST['Usuarios']);

            if ($model->save()) {
                if (Yii::app()->getRequest()->getIsAjaxRequest())
                    Yii::app()->end();
                else {
                    $this->guardaDeTemporal($_POST["time"], $model->USRID);
                }
                $this->redirect(array('view', 'id' => $model->USRID));
            }
        }

        $this->render('create', array('model' => $model));
    }

    private function guardaDeTemporal($time, $usrid) {
        $con = Yii::app()->db;
        $con->createCommand("delete from ROLES_USUARIOS where USR_ID = $usrid")->execute();
        $sql = "select TMP.TEMPORALINT1 FROM TEMPORAL TMP
                WHERE TMP.TEMPORALINDICE = $time";
        $result = $con->createCommand($sql);
        $result = $result->queryAll();
        if (count($result) > 0)
            foreach ($result as $row) {
                $rows = array_values($row);
                $sql = "insert into ROLES_USUARIOS(USR_ID,RLS_ID) VALUES($usrid,{$rows[0]})";
                $con->createCommand($sql)->execute();
            }
        $con->createCommand("delete from temporal where TEMPORALINDICE = $time")->execute();
    }

//fin private function guardaDeTemporal($time,$usrid){

    public function actionUpdate($id) {
        $model = $this->loadModel($id, 'Usuarios');


        if (isset($_POST['Usuarios'])) {
            $model->setAttributes($_POST['Usuarios']);

            if ($model->save()) {
                $this->guardaDeTemporal($_POST["time"], $model->USRID);
                $this->redirect(array('view', 'id' => $model->USRID));
            }
        }

        $this->render('update', array(
            'model' => $model,
        ));
    }

    public function actionDelete($id) {
        if (Yii::app()->getRequest()->getIsPostRequest()) {
            $this->loadModel($id, 'Usuarios')->delete();

            if (!Yii::app()->getRequest()->getIsAjaxRequest())
                $this->redirect(array('admin'));
        } else
            throw new CHttpException(400, Yii::t('app', 'Your request is invalid.'));
    }

    public function actionIndex() {
        $dataProvider = new CActiveDataProvider('Usuarios');
        $this->render('index', array(
            'dataProvider' => $dataProvider,
        ));
    }

    public function actionvalidaLDAP() {
        $sede = trim($_POST["sede"]);
        $user = trim($_POST["user"]);
        echo $this->ldpa_conex($user, "", $sede, true);
    }

//fin public function actionvalidaLDAP() {

    private function ldpa_conex($usuario, $password, $sede, $opc = false) {
        if ($opc)
            return 1;
        $ldapHost = "ldap://unldap.unal.edu.co";
        $ldapPort = "389";
        $ldapBusqueda = "uid=user_ldap,ou=institucional,o=" . $sede . ",o=unal.edu.co";
        $ldapBPassword = "consultaldap";
        $identificadorUsuario = "uid";
        $BusquedaAdicional = "(employeeType=1)"; //Cadena de busqueda adicional al identificador de usuario, sino se desea un adicional se puede dejar vacio
        $dn = "o=unal.edu.co"; //Base de busqueda del usuario
        $FiltroBaseUsuario = array("dn"); // Datos a ser extraidos del LDAP para el usuario, puede ser extraida inmediatamente cualquier informacion contenida, antes de autenticarse en el directorio

        $User = $usuario; // datos tomados de la pagina de autenticacion
        $Pswd = $password;
        $ldapLink = "";
        if ($ldapLink = ldap_connect($ldapHost, $ldapPort)) {
            if (ldap_set_option($ldapLink, LDAP_OPT_PROTOCOL_VERSION, 3)) {
                $ExitoConBusqueda = @ldap_bind($ldapLink, $ldapBusqueda, $ldapBPassword);
                if ($ExitoConBusqueda) {
                    // en un programa decente toca controlar el evento generado (PHP Warning:  ldap_bind(): Unable to bind to server: Invalid credentials ) por php; como esta este es solo de demostracion
                    $result = ldap_search($ldapLink, $dn, "(&(" . $identificadorUsuario . "=" . $User . ")" . $BusquedaAdicional . ")", $FiltroBaseUsuario) or die(ldap_error($ldapLink));
                    $entradas = ldap_get_entries($ldapLink, $result);
                    $nEntradas = ldap_count_entries($ldapLink, $result);
                    if ($nEntradas != 0) {
                        $ExitoConAut = @ldap_bind($ldapLink, $entradas[0]["dn"], $Pswd);
                        if ($ExitoConAut) {
                            // en un programa decente toca controlar el evento generado (PHP Warning:  ldap_bind(): Unable to bind to server: Invalid credentials ) por php; como esta este es solo de demostracion
                            return "0"; //"Conexion Satisfactoria
                        }/* endIf */ else {
                            ldap_close($ldapLink);
                            return "3"; //Clave mala o piratin
                        }
                    }/* endIf */ else {
                        return "4"; //"pailas no existe ese usuario, o no esta autorizado"
                    }/* endelse */
                }/* endIf */ else {
                    ldap_close($ldapLink);
                    return "5"; //Conexion Imposible para busqueda
                }/* endelse */
            }/* endIf */ else {
                return "6"; //Protocolo Invalido
            }/* endelse */
            ldap_close($ldapLink);
        }/* endIf */ else {
            return "7"; //Servidor no encontrado
        }/* endelse */
    }

//fin private function ldpa_conex($usuario, $password, $sede,$opc = false) {

    public function actionAdmin() {
        $model = new Usuarios('search');
        $model->unsetAttributes();

        if (isset($_GET['Usuarios']))
            $model->setAttributes($_GET['Usuarios']);

        $this->render('admin', array(
            'model' => $model,
        ));
    }

//fin public function actionAdmin() {

    public function actionagregaRol() {
        $time = trim($_POST["time"]);
        $rol = intval($_POST["rol"]);
        if (!is_int($rol) || $time == "")
            exit("Parametros incorrectos");
        $sql = "select * from temporal where TEMPORALINDICE = $time and TEMPORALINT1 = $rol ";
        $connection = Yii::app()->db;
        $command = $connection->createCommand($sql);
        $results = $command->queryAll();
        if (count($results) <= 0) {
            $sql = "insert into temporal(TEMPORALINDICE,TEMPORALINT1) values($time,$rol)";
            $command = $connection->createCommand($sql)->execute();
        }
        echo $this->muestraRoles($time, $connection);
    }

//fin public function agregaRol(){
    public function actioneliminaRol() {
        $time = trim($_POST["time"]);
        $temporalId = intval($_POST["tmpId"]);
        if (!is_int($temporalId) || $time == "")
            exit("Parametros incorrectos");
        $sql = "delete from temporal where TEMPORALID = $temporalId";
        $connection = Yii::app()->db;
        $connection->createCommand($sql)->execute();
        echo $this->muestraRoles($time, $connection);
    }

//fin public function eliminaRol(){

    private function muestraRoles($time, $con) {
        $sql = "select TMP.TEMPORALID,ROL.RLSNOMBRE FROM TEMPORAL TMP
                INNER JOIN ROLES ROL ON ROL.RLSID = TMP.TEMPORALINT1
                WHERE TMP.TEMPORALINDICE = $time";
        $result = $con->createCommand($sql);
        $result = $result->queryAll();
        $campos = "";
        if (count($result) > 0)
            foreach ($result as $row) {
                $rows = array_values($row);
                $campos .= "<div class='divContieneRol'><div class='divAccion'><a href='javascript:deleteRol({$rows[0]});' title='Eliminar rol {$rows[1]}'>Eliminar</a></div>";
                $campos .= "<div class='divRol'>{$rows[1]}</div></div>";
            }
        return $campos;
    }

//fin private function muestraRoles($time){
}